日記 2023-09
公開
2023-09-30 18:57

再びデジタル・ミニマリストを読み返している。
ウーム……


Lispで多値を返したいとき、多値や分配束縛の記法が面倒だから、結局consしてcar/cdrすること多くて、なんかストレスがすごい。
Cで変数のポインタ渡すときもウゲってなるんだけど、アロケーションを意識しちゃう分それよりも嫌な気分になる。
やっぱ多値やタプルの簡易な表記って必須っすよ……



LinuxのVLCで音が途切れるの、音が途切れるな〜と思いながら使ってたんだけど、単にオーディオ出力をALSAにすればいいだけだった


面倒さに耐えながらワイドモニタから一時的にデュアルモニタに戻してみた。
で、違和感すごくてワイドモニタにまた替えた。
一日が潰れたニャン


On Task Hoarding and Todo Bankruptcy
久々に読んでた。後半も大事なんだけど、前半が示唆に富みすぎている。
あまりにも好きな話なのでかんたんに翻訳してみた。


先週、私はブリティッシュ・チャンネル4で放送された、慢性のホーダー(溜め込む人、ゴミ屋敷の住人)であるリチャード・ウォレスという人物についてのドキュメンタリーを見た。興味深い内容だった。

彼は何年も風呂に入っていなかった。
家中の他の全てと同じように、風呂も山のようなゴミで天井まで埋まっていたからだ。
ある部屋から隣の部屋へ行くために、ゴミの山の上を泳いで渡り、扉の上をくぐり抜けなければならなかった。

それでも、彼はかなり普通の人だった。
彼は怒れるスマウグ(ロードオブザリングのキャラクター)のように、溜め込んだ黄金を守るために戦ったりはしない。
ユーモアのセンスがあり、普通に会話をすることができる。

しかし、彼は洞察力が深刻に欠如していた。
信じられないような生活状況(ベッドは天井までのゴミで覆われていて、彼は椅子で寝ている)にもかかわらず、彼は精神的な症状があるとは思っていなかった。

ここが大事なポイントだ。
彼は、自分がイカれたゴミ屋敷を作る習慣を持っているとは信じない。
収納が不足しているのが問題なのだと思っていた。

(中略。筆者は、自分が大量のやることを溜め込むのが彼みたいだと考えた)

狂ったゴミ屋敷の住人のように、私はやることの山を築く原因を間違えていた。
彼は、自分の問題は収納の不足だと思っていた(本当はそこらへんに何でも投げるのが問題だ)。
私は、1日たった24時間しか無いことが問題かのように振る舞っていた。
正確に言うと……正確には何だろう?
狂った人間が、狂った理由で、自分の狂った状況を診断するのは、狂っているように見える。


この後、本当は時間が無いのではなく、なんでもやることリストに追加していくのが問題だと話を展開していく。
ただ、物やタスクの溜め込み癖に限らず、「狂った人間が、狂った理由で、自分の狂った状況を診断するのは、狂っているように見える」という一節をいつも思い出す。
一向に解決しない問題を抱え続けているとき、診断自体が間違えているのでは?と考えたほうが良い。多分。
最近もちょっと、延々と悩んでいることがあるんだけど、間違った原因に解決を求めている気がする。



ワイヤレスキーボード、たまーに反応抜けるのが思ったよりストレスでワイヤードに戻してしまった。
ンギギギ


たまーにC言語書くと、なんかこうパワが解放された感があって集中して大量のコード書ける。


うーん、継続や例外の実装を楽にするためRingをVMにしようかと思ってたけど、やめることにした。

ミニマルなブートストラップが一番の目的の実装なんだけど、VMだと
1. schemeでring->vmコードコンパイラを書く(検証用にvmも一度schemeで書く)
2. schemeでstoneコンパイラを書く
3. stoneでvmを書く
4. ironでring->vmコンパイラを書く
5. ironでstoneコンパイラを書く
6. ironで書いたREPL(ring->vmコンパイラ込み)をstoneのvmコードに統合してironでコンパイル
ブートストラップにここまでかかる上に、マクロ展開器などを考えると非常にややこしい。

現在のインタープリタだと
1. schemeでstoneコンパイラを書く
2. stoneでironを書く
3. ironでstoneコンパイラを書く
以上!



仕事で作ったElectron製のWindowsアプリを1年ぶりに環境整えてビルドしたらdeprecated deprecated error error
キレそうニャン


腰が突然おかしくなったので寝込んでおりました。
多分30秒で1冊の本を読む曲を作るときに、画面の表示が小さすぎて前かがみになってたんだと思う。

寝てる間暇だったのでStSやってウォッチャーA20Hクリアした。
まあ圧縮ループ。憂さ晴らしやね。


久々にForth Haiku眺めてた。
こういうの好き


StS ディフェクト A20Hクリア

やりもうした!!!!!!!!!!!!!!
ついに全キャラA20Hクリア。

インサータ+消尽、アーティファクト+認知偏向の黄金コンボ。
初っ端からルーニックコンデンサ買えたのでとにかく大量のオーブ浮かべる方向。
鳥頭壷のおかげで道中も完全に安定してた。
Act3はデカドヌとタイムイーター。鳥だとちょっと危なかったかも。
タイムイーター戦は集中18ぐらいまで上がり、最後の方はカード使わずにターン終了して圧殺。

これで死んだらもう……いい加減にしろ!と思ったけど矛盾で事故って死にかけた。
心臓もアーティファクト+認知偏向が決まらず。
減っていく集中をインサータ+消尽でしのぎつつ、ひたすらオーブを浮かべる。
最後は危なかったけど、教えの書でクリエイティブAI、そこから反響化出てなんとかなった。

最後に反響化使ったけど、正直必要かな……?
反響化のためにエナジー3つ分無防備になったり、デフラグの使用を遅らせて危なくなることが多い。
認知偏向や消尽を上手いこと使ったほうがマシな気がする。

めちゃくちゃ楽しんだし、とりあえずしばらくはほどほどにしよう。
シレン6も出ることだし時間の余裕を作っておかねば……


遊園地で殺人ロボット達がニコラス・ケイジに襲われる映画ウィリーズ・ワンダーランド見た。
おもしろかったです。
俺も棒で戦う練習しよ。



先日、唐突に読みたくなったので、Kindleで火の鳥を12冊ぐらい一気に買った。
何巻まであるんだこれ……?
まだ途中だけどやっぱこれすごすぎる。
紙でも欲しくなってきた。



また最近、ドーパミン中毒やべ〜と感じることが多いので、いくつかの原因を利用しづらくしてみることにした。
Xのアプリをスマホから消したり、ブラウザの履歴クリアして補完できなくしたり、/etc/hosts書き換えていくつかのサイトアクセスできなくしたり。


StS ディフェクトA20H 心臓で死
2ターン目に67、3ターン目に45飛んでくるのに、呑気に反響化してフロスト張ってデフラグ来るの待って……って間に合わないわね。
パワーに頼らないフロントロードだと遺伝的アルゴリズムは必須かなあ。



全部アセンブリで書かれたOSであるMenuetOS、昔見た時もやべ〜〜と思ってたんだけど、今見たら更に進化しててすごい。
そのフォークのKolibriOSも。
流石にアプリはCとかで書かれてるよな……?と思ってKolibriのソース確認したけど大量のアセンブリコードが出てくる
うーむ……


StS アイアンクラッド A20Hクリア
ようやくクリアした、長かった。

スネッコアイ+堕落+無痛+カロンの遺灰で道中は楽勝。
ひたすら防御と高コストアタックを集めつつ、早めのターンで堕落が来るのをお祈り。
スケールは悪魔頼り。

タングステンの棒も途中で手に入った。
ビャードが来ないなど微妙に役立つシーン少なかったけど、最後に心臓の連撃で大活躍。

最強プレイヤーらしいJorbsのプレイなど分析してもずっと勝てず。
しかし少しずつAct3の2体目に挑める回数増えたかな、というところで抜群の引きが来て勝てた。

で、最後に残ったのが激ムズらしいディフェクト。
いつかやる、いつか……



ちょっと気になったのでインタプリタ版Ringの最適化。
今のところセルフホスト全体に5.8秒ほどかかっている。

シンボルを評価する度に環境を全て調べていって、なければグローバル変数としてシンボルの値を直接get/setしている。
carやcdrなども当然毎回環境を辿るわけで、これが遅いのでは?と思い、新たなフォーム(%globref sym)を作って直接評価してみた。
とりあえずコアライブラリのcarとcdrを置き換えたけど、結果は6秒と伸びた。
多分全部置き換えないといけない。

しかしコアライブラリの後でマクロ展開器を定義してるわけで、コアライブラリの内容を後で全部書き換える必要がある。
インタプリタなので、例えば初回の評価時にシンボルならその場でツリーを書き換える方法もあると思うけど、親と自分の位置を常に追跡する必要がある。うーん、めんどくさい。



お絵描き計画。
Raspberry Piで動くレベルのお絵描きソフトを自作して、お絵描き専用機を作る。
そのためにまずLisp処理系を……


久々に絵を描こうとして気づいたんだけど、ワイドモニタとペンタブレット、相性がいくらなんでも悪すぎる。
ペンタブレットとモニタで比率が全然違うから、作業領域を変更しないといけない。
しかし作業領域が常に表示されるわけじゃないから、動作にかなり違和感がある。

というわけで多分しばらく絵は描かない……ワイドモニタかなり気に入ってるので。
どうしても描きたかったらマウスでドット絵ポチポチかアナログかなあ。
前者はトラックボールだから腱鞘炎になりそうだし、後者は首が死にそうだし……


デュアルモニタ使ってたけど、スリープ復帰タイミングによっていろいろ面倒があったり、全画面のゲームで妙な挙動を起こしたり、ウインドウ配置ショートカットの効きなどもよろしくなかったので、前々から計画してたウルトラワイドモニタに変えた。
曲面なので端も見やすい。今の所快適。


StS A20H、アイアンクラッド全くクリアできない。
下手になったのか……?と思って心臓無視(スーパーエリートも無視)したら普通に2連勝した。
なるほどね



ribbitでの限定継続(shift/reset)の実装考えてたけど、頭おかしくなるでこんなん……

で、Choose Boring TechnologyのInnovation Tokenの話思い出す。
うーん、やめよっかな


相変わらずRibbit SchemeのVM/コンパイラの実装を解読していた。
SCマシンの優位性はちょっと掴めた気がする。

まず2つのレジスタ、というのがRibと相性が良い。
継続をスタックに置くとき、new-stack := (cons code old-stack)という形にすれば、ローカル変数は単にstackを辿るだけで良い。コンパイル時に位置はdeBrujinIndexで決まる。
コンパイル時間の環境が単純なリストなら、継続の分はnilでもenvに突っ込んでやればいい。
Envレジスタと比べたらちょっとだけ遅いんだけど、lexical envがかなり深い場合以外は多分そこまで差が出ない。
むしろlet毎にEnvフレームを生成するような実装に比べると、逆にSCの方が速くなるかも。
また、コンパイラもVMも、ローカル環境に関してはSCの方がかなり簡単な実装になる。

nextがnilの場合はリターン操作なんだけど、これはstackから一番上の継続を探して、stackとcodeを取り出してセットする。
returnの度にスタックを舐めるのは……と一瞬思ったけど、beginでちゃんとpopしてやれば、stackはその関数への引数までしか膨らまない。
list関数など、rest引数を取るものはapply時に1つのリストへとconsできるので、名前付きの引数が10個も20個もある関数を何度も呼ぶ、というめちゃくちゃなコードじゃないと気にならないはず。
Dumpレジスタがある場合と比べても大したことはなさそう。

というわけでかなり良いな、と思い直したのでSCで実装し直してる。

コードの動きをかなり丁寧に追わないとここまで理解できなかった。
Schemeに限らずCS系の人、頭良すぎるのかコメントも少ないわネストも深いわ死ぬほど読みにくいコードが多い。
短期記憶の容量が俺の1000倍ぐらいあるでしょ。



夜中に喉乾いて、暗闇の中タンブラーに入れてた水飲んだらデカい羽アリが入ってた。
その場で吐き出してしまった。
コロ……ス……


Ringでずっと取れなかったバグが取れた。
SDL2をdlopenで呼んでウィンドウ出してたんだけど、解放時に結構な確率でセグフォになる。
アセンブリだから、mallocする前のお作法を何か飛ばしてるのかな……とlibcのコード読んだりしたけど解決せず。

で、今日よく見たら普通にcalloc(0, size)という意味のコード書いてた。
おぉい!


Plan9のacme触ってみた。
う、うーん、うーん……面白いっちゃ面白いけど……



Lazarusやっぱさっぱりわからん。全てが異文化すぎる。
というわけでRustをちょと触ってみることにした。



PC(Linux)でStSプレイすると何故かディスプレイの電源が落ちる。
Why!?


自作らくがきソフトのコーディングをちょっと進めた。
キャンバスのパディングと左右反転まで。
あとは書き出しつければそこそこ楽しめそう。

UIはコマンドとショートカットが基本、というストロングスタイルを貫くつもりなんだけど、やっぱいくつかのビューが欲しい。
しかし今はSDL2でサーフェスにバイト配列を転送している。レイアウトなど自分でやろうとすると面倒。
うーん、Tkinterでも使うかなあ


Schemeでシンボルのデコードまで実装。
シンボルテーブルの扱いに悩む。
readをVMの上のLisp側に持っていくとなると、シンボルテーブルはLispから扱えないといけない。
単純なリストだとreadの度にO(n)なので避けたいが、Ribでハッシュテーブルや二分木書きたいかというと……。
文字列のハッシュの計算をLispでやるとなると更に遅くて、結局ある程度までは単純なリストの方が勝ちそう。
とりあえず最初はリストでやって計測するか〜



Ribbit何回読んでもSECDじゃなくてSCにする理由がわからねェ……!
おで、おでバガだがらよ゛……

というわけでRibbitを参考に、SECD版でRing用のVM書いてみることにした。
といっても遅いIronRingでコンパイラを書いて、StoneRingでVMを書いて……となるとなかなか時間がかかる。
まずはSchemeでVM/Compilerを書いて試してみる。


StS アイアンクラッド A20H心臓で死
今日はちょっと久々にプレイした(中2日だけど)
剣の一閃が3枚も手に入ったので、デッキ圧縮していって無限ループ。
……までは矛盾まで。
心臓の1・2ターン目で手札大事故が起きて、3ターン目の15連撃で幻姿使っても死んだ。
教訓:デッキ圧縮かドローが多めじゃないと心臓は運。


PVCで作るポンプ
面白そう、やってみたい



ずっと前から悩んでいる、Manjaro/Xfce4でbluetooth接続時などにkeymapがリセットされる謎。
XkbOptionsでCapsをCtrlに変えていても上書きされて元に戻ってしまう。
無線キーボードに変えたところ、xprofileでsetxkbmapをしていても立ち上がりからoptionsが上書きされている事を確認。

上書きされている内容はどうも/etc/X11/mhwd.d/nvidia.confと/etc/X11/xorg.conf.d/90-mhwd.confに書いてある。
90-mhwd.confはnvidia.confへのリンク。
多分nvidia-xconfigがそのときのキー設定を書き出して、90-mhwd.confが00-keyboard.confより後に読み込まれて上書きしている。

というわけでnvidia.confから記述を消したら、問題は解消。
setxkbmap -queryで意図したオプションが設定されていることを確認。
立ち上がり、無線キーボードとbluetoothデバイスのon/offでもok。



久しぶりにRibbit Schemeのコードと論文眺めてた。
Cマシンだと思ってたけどSCマシンだねこれ。EnvとDumpをStackに積んでしまうやりかた。
しかし利点が全然わからない。
データ構造とコードはEやDレジスタがある場合と比べて複雑になる。
call/returnの度にスタック走査が必要なのでスピードも遅い。
SECDと比べてレジスタが2つ少ないけど、結局同じデータをSに置くのでメモリ使用量は変わらない。
うーん?


bintracker
チップチューン用のtracker。
なんとchicken schemeで書かれてる。
インターフェイスかっこいいけどTkなんだな
いろいろと面白い。




なんかあんまりよろしくないコンディションで安定しておる、まずい。


ひっさびさにC言語書いてるけど、Goと混ざってわけわからないコード書いちゃって笑う。
あらためて型周りの文法がすごい。違法建築。



StS アイアンクラッド A20H 心臓で死
ネオーの交換でスネッコアイ。
フルストライクとか高コストのアタックを取りまくって道中は火力で押し切った。
このまま行けたりして……wとか思ったけど全く行ける要素無かった。
心臓の2・3ターン目の超火力を耐えきる必要があるので、ブロックはやっぱり捨てられない。

多分このパターンで行けるとしたら堕落+古木が揃う必要あって、それなら別にスネッコいらない気もする。
ただブラックスター取ってエリート狩りまくったので、安定はしないけど正しい道中だったのかもしれない。


ふと思い立って、地獄と化していたデスク裏のケーブル類をまとめてみた。
100均でネットとラックを買ってまとめるよくあるやり方。
とりあえず地面にケーブルが垂れるようなことは無くなったんだけど、見た目はまだ全然汚い。

現在のケーブルを数えてみると
4 ディスプレイ(電源とPCへのケーブル、デュアルディスプレイ)
1 PC(電源ケーブル)
3 スピーカー(電源、PCとの接続、LRの接続)
2 USBハブ(電源、PCとの接続)
1 電源タップ
1 LANケーブル

12本!!そりゃ見た目汚くなるわけだ。

とりあえずデュアルディスプレイはちょっと使いづらく感じてて、ワイドのものを1つと置き換えたい。
USBハブは今の所給電が必要なものは無いからUSB一本のものに置き換える。
スピーカーは遅延が気になるからUSB type-C給電で本体1つの物にする。
これで5本マイナスで7本。
7本かウーム……多い……



20分座って念入りにストレッチをして、を繰り返しておる。
しかし痛いのとは反対側に違和感が出てきた……


X.COMの収益化で本格的に文化の変化を感じる。
ここらへんでちょっと今までの、特にイラスト関係の文化を思い出してみる。

2007年ぐらいだったかな、Twitterが流行り始めて広瀬香美がヒィッヒヒヒヒとか言ってワイワイやってた頃。
確か俺は最初で最後のツイッターオフ会に行って、なんか気持ち悪い人しか居なくて、同じく浮いてたバンドマンっぽい人とすぐに離脱してスタバに行った。話してみたらやっぱりバンドマン(ベース)で、近くのスタジオに1時間500円で入ってセッションして遊んだ。その後も2・3回スタジオ入って遊んだけど、彼が仕事忙しくなって疎遠になってしまった。元気してるかな。

いや脱線しすぎた。
その頃はイイネはfavorite、ふぁぼと呼ばれており、誰がいいねしたかはふぁぼったーとかいう別サービスで確認するしかなかった。だよね?
5イイネ超えるとそのサイトでは文字が赤くなり、赤ふぁぼとか呼ばれてヒット扱いだった。
つまりその程度の反応量。

同時期の絵の文化はまだまだPixivが主流で、デイリーランキングとかでみんなしのぎを削ってた。
ちなみに俺はちゃんと絵を描き始めたのは2018年ぐらいからで、必死にランキングを争って2chとかで叩き合ってるの見てアホだなあと思って見てた。
Twitterのせいでその後もっと酷いことになるんだけど。

絵は基本的にPixivで探すもので、Twitterは単なる交流ツールという状態は数年続いたと思う。
デジタル同人とかはまだまだマニアックな文化で、依頼系や支援系サービスもずっと無かった。

多分、転機はリツイートの実装。
それまでユーザーがRT: @jin_skaみたいに手書きでリツイートしてたのを、公式が取り入れた。
それで拡散力が爆発的に高まって、絵をよく目にするようになった。
また、イイネも公式で数字が出たり確認できるようになった。
絵に対する反応も爆発的に増えたので、突然大量の絵描きが戦場をTwitterに移した。

そこからイラストの文化そのものが結構変わったように感じる。

まず、絵と絵描きの評価がかなり上がった。
絵は見た瞬間に、文字通り光の速さで価値を感じ始める。
例えば、再生してもらって数秒は聞いてもらわないと評価すらできない音楽と比べると圧倒的。
SNSでの評価にかなり強い。

それと、お金と密接に結びつくようになった。
ある時期から、SNSで知名度を高めて仕事を受ける、という戦略を取る人が激増したように感じる。
依頼系や支援系サービスの発展は最近だけど、とにかく絵で稼ぎたい、という需要が増えたから発展したのでしょう。

それらへの変化が良いか悪いかはわからない。
個人的には、精神と肉体に悪影響を受ける人が殆どなので、みんな健康寿命を対価にしている気はする。

ただこうして思い返すと、イラストの価値はSNSによって跳ね上がった……というより、SNSに合わせて変化した気がする。
そのSNSと文化が、同じ形でずっと続くかどうかはわからない。

X.COMはオススメ機能を強烈に推して、インフルエンサーの軽挙妄動で金を稼ぎたいらしい。
ゆるい交流・拡散サービスとしての側面がどんどん消え、閉じた輪とロックスターの二極化していくかもしれない。
そうなるとイラスト文化もまた結構変化するかもしれない。

こうして書くとちょっとなあ、X.COMでイラスト公開はもうやめよっかな〜と割と強めに思う。
アカウント消したり作ったり消したり作ったり消したり作ったり消したり作ったりはもうやりたくないんだけど……
イラスト目当てにフォローしてくれた人に一生古いLisp処理系情報見せるのも申し訳ないと言うか……
そもそもX.COMこれ以上使うのちょっと……みたいな……
ど、どうしたらいい、俺は


StS サイレント A20Hクリア
心臓撃破。ちゃんと宝箱の鍵って連呼した甲斐があった。
錬金術3枚、狂気+アクロバット3枚+策士2枚というハチャメチャなプレイ。
聖樹皮を取ったのもあり、道中は狙った通りポーション連打からのアクロバットループで楽勝。
セットアップで0コスにしたバウンドフラスコを連打したり、上手い具合にシナジーが決まった。

ただブロックを積む手段がポーション以外に無い。
これタイムイーターや心臓やばいんじゃね……?と思ってたら案の定。
タイムイーターでHP一桁まで減り、心臓は早めに触媒切ってしまったのもあってギリッギリだった。
鼓動ダメージ舐めてた。
矛盾と心臓で、一番危ないときに金切り声が来てくれたおかげで助かった。
かなり薄氷の勝利。




ようやく20〜30分ぐらい続けて座れるようになってきた。
ストレッチでは全然腰痛まない。
特に運転など、座っているとかなり痛くなる。
うーむ



StS サイレント A20クリア
何故心臓に行ってないのか?
そう────

宝箱の鍵を取り忘れたのであるッッ!!

タイムイーターに削られて矛盾前にHP8+回復だったから死んでる気がする。
まあでもナイフクナイに頼ってたからキツかった。
バースト触媒が一生揃わなかったし。
ストライク防御多すぎたのが原因かなあ。



くがつー。
言及